package com.dtf.core.common.dao;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.dtf.core.common.vo.Pagination;

@Component
public interface BaseDaoSupport{
	
	/**
	 * 获取spring内部封装过的NamedParameterJdbcTemplate
	 * @return
	 */
	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate();
	/**
	 * 查询分页
	 * @param sql
	 * @param param
	 * @param pageSize
	 * @param pageIndex 第一页默认为1
	 * @return 带list<Map<String,Object>>的Pagination
	 */
	public Pagination queryListMapForPage(String sql,List param,int pageSize,int pageIndex);
	
	/**
	 * 查询分页
	 * @param sql
	 * @param param
	 * @param pageSize
	 * @param pageIndex 第一页默认为1
	 * @return 带jqGrid封装好的Map对象
	 */
	public Map queryListMapJGPage(String sql,List param,int pageSize,int pageIndex);
	
	/**
	 * 查询分页，不带总条数和总页数
	 * @param sql
	 * @param param
	 * @param pageSize
	 * @param pageIndex 第一页默认为1
	 * @return 带list<Map<String,Object>>的Pagination
	 */
	public Pagination queryListMapForPageNoCount(String sql,List param,int pageSize,int pageIndex);
	
	
	public int update(String sql,List param) ;
	
	/**
	 * 直接添加一个对象到数据库
	 * @param bean
	 * @return
	 */
	public int add(Object bean);
	
	/**
	 * 根据bean中设置的主键，将数据更改为bean内的内容
	 * @param bean
	 * @return
	 */
	public int edit(Object bean);
	
	/**
	 * 根据fileds中的字段，获取bean中的字段作为条件，根据bean在数据库中的内容
	 * @param bean
	 * @param fileds
	 * @return
	 */
	public int editWithColumn(Object bean,String...fileds);
	
	/**
	 * 根据bean中设置的主键删除对应的数据
	 * @param bean
	 * @return
	 */
	public int delete(Object bean);
	
	/**
	 * 根据fileds中的字段，获取bean中的字段作为条件，删除数据库中对应的数据
	 * @param bean
	 * @param fileds
	 * @return
	 */
	public int deleteWithColumn(Object bean,String...fileds);
	
	/**
	 * 针对单表查询分页
	 * @param bean
	 * @param paramMap
	 * @param pageSize
	 * @param pageIndex
	 * @return
	 */
	public Pagination queryListBeanForPage(Class bean, Map paramMap, int pageSize, int pageIndex);
	
	/**
	 * 针对单表查询分页，不查询记录总数
	 * @param bean
	 * @param paramMap
	 * @param pageSize
	 * @param pageIndex
	 * @return
	 */
	public Pagination queryListBeanForPageNoCount(Class bean, Map paramMap, int pageSize, int pageIndex);
	
	/**
	 * 根据bean设置的PK查询对应的Bean数据
	 * @param bean
	 * @return
	 */
	public Object get(Object bean);
}

